package com.wulaoda.producer;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

//发送消息
public class Producer_HelloWorld {

    public static void main(String[] args) throws IOException, TimeoutException {

        //1.创建工厂
        ConnectionFactory factory = new ConnectionFactory();

        //2.设置参数
        factory.setHost("152.136.33.146");//   ip默认值是localhost
        factory.setPort(5672);//端口 默认值 5672
        //虚拟机如何创建，在管理端 右侧 选择Virtual Hosts
        //创建选择 Add a new virtual host
        //输入名字就可以了
        //设置虚拟机，一个mq服务可以设置多个虚拟机，每个虚拟机就相当于一个独立的mq
        factory.setVirtualHost("/");// 虚拟机  默认值是 /
        factory.setUsername("admin");//用户名 默认值 guest
        factory.setPassword("123456");//密码 默认值 guest

        //3.创建链接 Connection
        Connection connection = factory.newConnection();

        //4.创建Channel
        //创建会话通道，生产者和mq服务所有通信都在channel通道中完成
        Channel channel = connection.createChannel();

        //5.创建队列Queue
        //参数： String queue, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments
        /**
         * 参数明细：
         * 1.queue: 队列名称
         * 2.durable: 是否持久化，如果持久化，mq重启后队列还在
         * 3.exclusive:
                    * 是否独占连接，队列只允许在该连接中访问，
                    * 如果connection连接关闭队列则自动删除，如果将此参数设置true可用于临时队列的创建
         * 4.autoDelete: 自动删除，队列不再使用时是否自动删除此队列，如果将此参数和exclusive参数设置为true就可以实现临时队列（队列不用了就自动删除）
         * 5.arguments: 参数，可以设置一些额外的参数，比如：可以设置存活时间
         */
        //如果没有一个名字叫做hello_world的队列，则会创建该队列，如果有则不会创建
        channel.queueDeclare("hello_world",true,false,false,null);

        //6.发送消息
    //参数：String exchange, String routingKey, BasicProperties props, byte[] body
        /**
         * 参数明细：
         * 1.exchange: 交换机，如果不指定将使用mq的默认交换机
         * 2.routingKey: 路由key，交换机根据路由key来讲消息转发到指定的队列，如果不使用默认交换机，routingKey设置为队列名称
         * 3.props: 配置信息
         * 4.body: 消息内容
         */

        String body = "仵航全世界最牛逼！！！";
        channel.basicPublish("","hello_world",null,body.getBytes());

        //7.释放资源
        channel.close();
        connection.close();

    }

}
